package ncut.shumei.controller;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import springfox.documentation.service.*;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.builders.ApiInfoBuilder;
import com.fasterxml.jackson.databind.ObjectMapper;

import java.nio.charset.StandardCharsets;
import java.util.List;
@CrossOrigin(origins = "*")
@Api(tags = "文档管理")
@RestController
@RequestMapping("/api/doc")
public class DocController {

    @Autowired
    private Docket docket;
    
    @Autowired
    private ObjectMapper objectMapper;

    @ApiOperation("下载API文档(JSON格式)")
    @GetMapping("/download/json")
    public ResponseEntity<byte[]> downloadJson() throws Exception {
        // 获取Swagger JSON
        Object swaggerJson = docket.select().build();
        String jsonString = objectMapper.writeValueAsString(swaggerJson);
        
        return ResponseEntity.ok()
                .contentType(MediaType.APPLICATION_JSON)
                .header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"api-docs.json\"")
                .body(jsonString.getBytes(StandardCharsets.UTF_8));
    }

    @ApiOperation("下载API文档(HTML格式)")
    @GetMapping("/download/html")
    public ResponseEntity<byte[]> downloadHtml() throws Exception {
        ApiInfo apiInfo = new ApiInfoBuilder()
                .title("电梯维护管理系统 API文档")
                .description("本文档详细说明了电梯维护管理系统的所有API接口规范")
                .version("1.0")
                .contact(new Contact("开发团队", "http://example.com", "support@example.com"))
                .license("MIT License")
                .licenseUrl("https://opensource.org/licenses/MIT")
                .build();
                
        String html = generateHtml(apiInfo);
        
        return ResponseEntity.ok()
                .contentType(MediaType.TEXT_HTML)
                .header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"api-docs.html\"")
                .body(html.getBytes(StandardCharsets.UTF_8));
    }

    private String generateHtml(ApiInfo apiInfo) {
        StringBuilder html = new StringBuilder();
        html.append("<!DOCTYPE html><html><head>")
            .append("<title>").append(apiInfo.getTitle()).append("</title>")
            .append("<style>")
            .append("body { font-family: Arial, sans-serif; margin: 20px; }")
            .append("h1 { color: #333; }")
            .append("h2 { color: #666; margin-top: 30px; }")
            .append("h3 { color: #999; }")
            .append(".operation { border: 1px solid #ddd; padding: 10px; margin: 10px 0; border-radius: 5px; }")
            .append(".method { font-weight: bold; color: #009900; }")
            .append(".path { color: #0066cc; }")
            .append(".description { margin-top: 5px; color: #666; }")
            .append("</style>")
            .append("</head><body>");

        // 添加标题和描述
        html.append("<h1>").append(apiInfo.getTitle()).append("</h1>")
            .append("<p>").append(apiInfo.getDescription()).append("</p>");

        // 添加版本信息
        html.append("<p><strong>版本：</strong>").append(apiInfo.getVersion()).append("</p>");

        // 添加联系信息
        Contact contact = apiInfo.getContact();
        if (contact != null) {
            html.append("<h2>联系信息</h2>")
                .append("<p>名称：").append(contact.getName()).append("</p>")
                .append("<p>邮箱：").append(contact.getEmail()).append("</p>")
                .append("<p>网站：").append(contact.getUrl()).append("</p>");
        }

        // 添加许可信息
        html.append("<h2>许可信息</h2>")
            .append("<p>").append(apiInfo.getLicense())
            .append(" (<a href='").append(apiInfo.getLicenseUrl()).append("'>查看详情</a>)</p>");

        // 添加接口分组信息
        html.append("<h2>接口分组</h2>")
            .append("<ul>")
            .append("<li>认证管理：用户登录、注册、token验证</li>")
            .append("<li>用户管理：用户的增删改查、状态管理</li>")
            .append("<li>电梯管理：电梯的增删改查、状态管理</li>")
            .append("<li>维护任务：任务的创建、分配、状态更新</li>")
            .append("<li>文档管理：API文档的下载</li>")
            .append("</ul>");

        // 添加注意事项
        html.append("<h2>注意事项</h2>")
            .append("<ul>")
            .append("<li>所有请求需要在header中携带token（除了登录和注册接口）</li>")
            .append("<li>所有时间字段使用ISO 8601格式</li>")
            .append("<li>分页参数：page（页码，从1开始），size（每页大小）</li>")
            .append("<li>查询参数使用驼峰命名法</li>")
            .append("</ul>");

        html.append("</body></html>");
        return html.toString();
    }
} 